﻿using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using evt;

namespace evt{
public class ServerEventDispather {

	private static ServerEventDispather insit = null;
	private List<ServerEvent> evtArr = new List<ServerEvent>();
		private List<EventBean> beanArr = new List<EventBean>();

	public static ServerEventDispather getInstance()
	{
		if (insit == null) 
		{
			insit = new ServerEventDispather();
		}
		return insit;
	}

	public void AddEventDispather(string evtName,EvtCallBack callBack)
	{
		evtArr.Add (new ServerEvent (evtName,null,callBack));
	}
	
	public void Add(string evtName,object message){
			lock (this) {
				EventBean bean = new EventBean ();
				bean.beanName = evtName;
				bean.BeanData = message;
				beanArr.Add (bean);
			}

	}

	public void DispatherEvent()
	{ 
			lock (this) {
				if( evtArr.Count > 0 ){
					for( int f = 0 ; f < beanArr.ToArray().Length ; f++ ){
						for( int i = 0 ; i < evtArr.ToArray().Length ; i++ ){
							if( evtArr.ToArray()[i].evtName == beanArr.ToArray()[f].beanName ){
								evtArr.ToArray()[i].callBack(beanArr.ToArray()[f].BeanData);

							}
						}
					}
					beanArr.Clear();
				}

			}
		
		
	}

	public void removeAll()
	{
		evtArr.Clear ();
	}

	public void removeEventListener(string evtName)
	{
		ServerEvent[] tempArr = new ServerEvent[9];
		int index = 0;
		for(int i = 0 ; i < evtArr.ToArray().Length ; i ++ ){
			if(evtArr.ToArray()[i].evtName == evtName){
				tempArr[index] = evtArr.ToArray()[i];
				index++;
			}
		}

		for(int f = 0 ; f < tempArr.Length ; f++)
		{
			if( tempArr[f] != null ){
				evtArr.Remove(tempArr[f]);
			}
		}
	}
}
}
